using System;
using System.Windows;
using System.Windows.Controls;

namespace Client.Common {
  public class PasswordHelper {
    public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached
      ("Password", typeof(string), typeof(PasswordHelper), new PropertyMetadata(new PropertyChangedCallback(OnPropertyChange)));
    public static string GetPasswrod(DependencyObject d) {
      return (string)d.GetValue(PasswordProperty);
    }
    public static void SetPassword(DependencyObject d,string value) {
      d.SetValue(PasswordProperty, value);
    }
    public static readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached
      ("Attach", typeof(string), typeof(PasswordHelper), new PropertyMetadata((new PropertyChangedCallback(OnAttachChange))));
    public static string GetAttach(DependencyObject d) {
      return (string)d.GetValue(AttachProperty);
    }
    public static void SetAttach(DependencyObject d, string value) {
      d.SetValue(AttachProperty, value);
    }
    static bool _isUpdating = false;
    private static void Pb_PasswordChanged(object sender,RoutedEventArgs e) {
      PasswordBox pb = sender as PasswordBox;
      _isUpdating = true;
      SetPassword(pb, pb.Password);
      _isUpdating = false;
    }
    private static void OnPropertyChange(DependencyObject d,DependencyPropertyChangedEventArgs e) {
      PasswordBox pb = d as PasswordBox;
      pb.PasswordChanged -= Pb_PasswordChanged;
      if (!_isUpdating)
        (d as PasswordBox).Password = e.NewValue.ToString();
      pb.PasswordChanged += Pb_PasswordChanged;
    }
    private static void OnAttachChange(DependencyObject d,DependencyPropertyChangedEventArgs e) {
      PasswordBox pb = d as PasswordBox;
      pb.PasswordChanged += Pb_PasswordChanged;
    }

  }
}
